﻿package com.google.code.p.ivans.applications;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Scanner;

import org.apache.log4j.Logger;

import com.google.code.p.ivans.entities.Order;
import com.google.code.p.ivans.entities.Storage;
import com.google.code.p.ivans.entities.Waiter;
import com.google.code.p.ivans.myexceptions.EntityNotFoundException;
import com.google.code.p.ivans.myexceptions.NoLinksException;
import com.google.code.p.ivans.serviceinterfaces.OrderServiceInterface;
import com.google.code.p.ivans.serviceinterfaces.WaitersOrdersServiceInterface;
import com.google.code.p.ivans.serviceinterfacesimpls.OrderServiceInterfaceImpl;
import com.google.code.p.ivans.serviceinterfacesimpls.WaiterServiceInterfaceImpl;
import com.google.code.p.ivans.serviceinterfacesimpls.WaitersOrdersServiceInterfaceImpl;

public class Application_10_JDBC {
		
		public static final Logger logger = Logger.getLogger(Application_6_XML.class);
		
		static WaiterServiceInterfaceImpl waiterSI;
		static OrderServiceInterface orderSI;
		static WaitersOrdersServiceInterface waitersOrdersSI;
		
		static Scanner scanner;
		static BufferedReader bufread;	

		public static void main(String[] args) throws IOException, ClassNotFoundException {
			
			Storage.getInstance();
			
			waiterSI = new WaiterServiceInterfaceImpl();
			orderSI = new OrderServiceInterfaceImpl();
			waitersOrdersSI = new WaitersOrdersServiceInterfaceImpl();
			
			scanner = new Scanner(System.in);
			bufread = new BufferedReader(new InputStreamReader(System.in));	
			
			showMainMenu();
			/*
			try {
				
				Storage.getInstance().addOrder(new Order(3,new ArrayList<Integer>(Arrays.asList(new Integer[]{1,2,3})), new GregorianCalendar()));
				System.out.println("Ok");
			}
			catch(Exception e) {
				System.out.println("Exception:" + e.getMessage());
			}*/
		}	
		
		public static void showMainMenu() {
			int mainChoise;				
			
			//println(System.getProperty("user.dir"));
			
			printMenu("ГЛАВНОЕ МЕНЮ",
				"Официанты - 1\n" +
				"Заказы - 2\n" + 
				"Заказы_и_официанты - 3\n" +
				"Изменить режим(memory, file) - 4\n" +
				"Выход - 0"
			);
			
			while((mainChoise = scanner.nextInt()) != 0) {
				//официанты
				if(mainChoise == 1) {
					
					//logger.DEBUG
					if(logger.isDebugEnabled()){
						logger.debug("[DEBUG]Главное меню -> Официанты - 1");
					}
					
					printMenu("ОФИЦИАНТЫ",
						"Создать - 1\n" +
						"Открыть - 2\n" +
						"Список всех - 3\n" +
						"Изменить данные официанта - 4\n" +
						"Удалить официанта - 5\n" +
						"Список заказов официанта - 6\n" +
						"Выход - 0"
					);
					
					int waiterChoise;
					
					while((waiterChoise = scanner.nextInt()) != 0) {
						
						//создать официанта
						if(waiterChoise == 1){
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Официанты -> Создать - 1");
							}
							
							String first = "";
							String last = "";
							String patronymic = "";
							int dayBorn = 0;
							int monthBorn = 0;
							int yearBorn = 0;
							int salary = 0;
							
							//читаем с консоли данные
							try{							
								println(">>Введите Имя:");
								while((first = bufread.readLine()).length() < 1) {}
								
								
								println(">>Введите Фамилию:");
								while((last = bufread.readLine()).length() < 1) {}							
							
								
								println(">>Введите Отчество:");
								while((patronymic = bufread.readLine()).length() < 1) {}
								
								println(">>Введите день рождения:");
								dayBorn = scanner.nextInt();
								
								println(">>Введите месяц рождения:");
								monthBorn = scanner.nextInt();
								
								println(">>Введите год рождения:");
								yearBorn = scanner.nextInt();
								
								println(">>Введите зарплату:");
								salary = scanner.nextInt();	
								
								//создаем и добавляем
								try{
									Waiter waiter = new Waiter(first, last, patronymic, 
															new GregorianCalendar(yearBorn, monthBorn - 1, dayBorn),
															new GregorianCalendar(),
															salary);
									waiterSI.addWaiter(waiter);
									//println("ОФИЦИАНТ ДОБАВЛЕН");	
									
									if(logger.isInfoEnabled()){
										logger.info("[INFO]Создали официанта:\n" + waiter.toString());
									}
								}
								catch(IllegalArgumentException enfexc) {
									//println("Не удалось создать объект. Причина - " + enfexc.getMessage());									
									//logger.ERROR
									logger.error("[ERROR]Не удалось создать объект. Причина - " + enfexc.getMessage());
								}
								catch(SQLException ioe) {
									//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
		
									logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
									
									System.out.println("ioe.getMessage():" + ioe.getMessage().substring(0, ioe.getMessage().length() - 1));
									System.out.println("ioe.getLocalizedMessage():" + ioe.getLocalizedMessage());
									System.out.println("ioe.getSQLState():" + ioe.getSQLState());
									System.out.println("ioe.getCause():" + ioe.getCause());
									System.out.println("ioe.getErrorCode():" + ioe.getErrorCode());
								}							
							}						
							catch(IOException ioexc) {
								//println("Ошибка чтения данных. Причина - " + ioexc.getMessage());

								logger.error("[ERROR]Ошибка чтения данных. Причина - " + ioexc.getMessage());
							}
						}//конец создания официанта
						
						//открыть официанта
						else if(waiterChoise == 2) {
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Официанты -> Открыть - 2");
							}
							
							printMenu("ПОИСК ОФИЦИАНТА",
									"Открыть по ID - 1\n" +
									"Поиск по имени - 2\n" +
									"Выход - 0"
									);
							
							int openWaiterChoise;
							while((openWaiterChoise = scanner.nextInt()) != 0) {							
								
								//открыть по ID
								if(openWaiterChoise == 1){
									
									//logger.DEBUG
									if(logger.isDebugEnabled()){
										logger.debug("[DEBUG]Главное меню -> Официанты -> Открыть -> по ID - 1");
									}
									
									int id;
									println(">>Введите ID официанта");								
									id = scanner.nextInt();
									
									try {
										Waiter waiter = waiterSI.getByID(id);
										println("\n" + waiter + "\n");
										
										//logger.INFO
										if(logger.isInfoEnabled()){
											logger.info("[INFO]Просмотр официанта:\n" + waiter.toString());
										}
									}								
									catch(EntityNotFoundException exc) {
										///println("Отсутствует официант с данным id");
										
										logger.error("[ERROR]Отсутствует официант с данным id");
										//exc.printStackTrace();
									}
									catch(SQLException ioe) {
										//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
			
										logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
									}
									
								}//end открыть по ID
								
								//поиск по имени
								else if(openWaiterChoise == 2){
									
									//logger.DEBUG
									if(logger.isDebugEnabled()){
										logger.debug("[DEBUG]Главное меню -> Официанты -> Открыть -> по ФИО - 2");
									}
									
									String first_ = "";
									String last_ = "";
									String patronymic_ = "";
									
									//ввод данных для поиска
									try{	
										println(">>Введите имя");
										while((first_ = bufread.readLine()).length() < 1) {}
										
		
										println(">>Введите фамилию");
										while((last_ = bufread.readLine()).length() < 1) {}
		
										println(">>Введите отчество");
										while((patronymic_ = bufread.readLine()).length() < 1) {}
										
										List<Waiter> seached;
										try {
											seached = waiterSI.getAllWaitersByName(first_, last_, patronymic_);
											println("----------------------");
											println("Результаты:" + seached.size() +"\n");
											String result = showWaiters(seached);
											
											//logger.INFO
											if(logger.isInfoEnabled()){
												logger.info("[INFO]Поиск официантов по имени:\n" + result);
											}
										} 
										catch (EntityNotFoundException e) {
											//println("Отсутствуют официанты с данным именем");
											
											logger.error("[ERROR]Отсутствуют официанты с данным именем");
											//e.printStackTrace();
										}	
										catch(SQLException ioe) {
											//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
				
											//logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
											
											
											
										}								
									}
									catch(IOException ignore) {
										logger.error("[ERROR]Ошибка при чтении введенных данных");
									}
									
								}//end поиск по имени				
															
								printMenu("ПОИСК ОФИЦИАНТА",
										"Открыть по ID - 1\n" +
										"Поиск по имени - 2\n" +
										"Выход - 0");
							}//end while((openWaiterChoise = scanner.nextLine()) != 0)		
						}//end открыть официанта
						
						//список всех сотрудников
						else if(waiterChoise == 3){
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Официанты -> Список всех - 3");
							}
							
							//читаем всех официантов
							List<Waiter> allWaiters;
							try{
								allWaiters = waiterSI.getAllWaiters();
								
								println("Все официанты:");
								println("------------------------------------------------------------------------------------");																	
							
								//logger.INFO
								if(logger.isInfoEnabled()){
									logger.info("[INFO]Просмотр всех официантов:\n" + showWaiters(allWaiters));
								}
								
								println("------------------------------------------------------------------------------------");
							}
							catch (EntityNotFoundException e) {
								//println("ОФИЦИАНТЫ ОТСУТСТВУЮТ\n");
								
								logger.error("[ERROR]Хранилище официантов пусто или нет файлов официантов");
							}	
							catch(SQLException ioe) {
								//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
	
								logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
							}						
						}//end else if(waiterChoise == 3) список всех сотрудников	
						
						//изменяем данные
						else if(waiterChoise == 4) {						
							
							println(">>Введите ID официанта");								
							long id = scanner.nextInt();
							Waiter waiter;
								
							try {
								waiter = waiterSI.getByID(id);
								printMenu("Изменение данных",
										"Имя - 1\n" +
										"Фамилия - 2\n" +
										"Отчество - 3\n" +								
										"Зарплата - 4\n" + 
										"Выход - 0");
								
								int changeMenu = 1;
								while((changeMenu = scanner.nextInt()) != 0) {
									try{								
										//Имя
										if(changeMenu == 1) {
											String frst;
											println(">>Введите новое имя:");
											while((frst = bufread.readLine()).length() < 1) {} 
											waiterSI.updateWaiter(id, Waiter.FIRSTNAME_UPDATE,frst);
											
										}//end Имя
										
										//фамилия
										else if(changeMenu == 2) {
											String last;
											println(">>Введите новую фамилию:");
											while((last = bufread.readLine()).length() < 1) {} 
											waiterSI.updateWaiter(id, Waiter.LASTNAME_UPDATE,last);
										}							
										else if(changeMenu == 3) {
											String patr;
											println(">>Введите новое отчество:");
											while((patr = bufread.readLine()).length() < 1) {} 
											waiterSI.updateWaiter(id, Waiter.PATRONYMICNAME_UPDATE,patr);
										}
										else if(changeMenu == 4) {
											int sal;
											println(">>Введите новую зарплату:");
											sal = scanner.nextInt();
											waiterSI.updateWaiter(id, Waiter.SALARY_UPDATE,sal);
										}
									}
									catch (FileNotFoundException e) {
										//println("Файл официанта с данным id отсутствует");
										
										logger.error("[ERROR]Файл официанта с данным id отсутствует");
									}	
									catch(IOException exc) {
										//println("Ошибка чтения данных из файла официанта");
										
										logger.error("[ERROR]Ошибка чтения данных из файла официанта");									
									}
									
									printMenu("Изменение данных",
											"Имя - 1\n" +
											"Фамилия - 2\n" +
											"Отчество - 3\n" +										
											"Зарплата - 4\n" + 
											"Выход - 0");
								}
							}
							catch (EntityNotFoundException e) {
								//println("Официант с данным id отсутствует");
								
								logger.error("[ERROR]Официант с данным id отсутствует");
							}	
							catch(SQLException ioe) {
								//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
	
								logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
							}
						}//end else if(waiterChoise == 4) изменение данных	
						
						//удаляем сотрудника
						else if(waiterChoise == 5) {
							println(">>Введите ID официанта");								
							long id = scanner.nextInt();							
						
							try {
								waiterSI.removeByID(id);
								//println("Официант Удален!\n");
								if(logger.isInfoEnabled()){
									logger.info("[INFO]Официант удален:");
								}
							}														
							catch(SQLException ioe) {
								//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
	
								logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
							}	
						}//end else if(waiterChoise == 5)
						
						//вывод всех заказов официанта
						else if(waiterChoise == 6) {
							println(">>Введите ID официанта");								
							long id = scanner.nextInt();
							List<Order> orders;
						
							try {
								Waiter waiter = Storage.getInstance().searchWaiterByID(id);
								orders = waiterSI.getWaitersOrders(id);
								if(logger.isInfoEnabled()) {
									logger.info("[INFO]Заказы официанта с ID=" + id + ":\n" + showOrders(orders));
								}							
							}
							catch(NoLinksException e) {
								//println("Связей Официант<->Заказ нет");
								
								logger.error("[ERROR]У данного официанта нет заказов");
							}
							catch(EntityNotFoundException enf) {
								//println("Официант с данным id отсутствует в коллекции");
								
								logger.error("[ERROR]Официант с данным id отсутствует в коллекции");
							}
							catch(SQLException ioe) {
								//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());
	
								logger.error("[ERROR]Ошибка записи данных официанта в файл. Причина - " + ioe.getMessage());
							}		
							
						}//end 	else if(waiterChoise == 6) вывод всех заказов официанта
						
						printMenu("ОФИЦИАНТЫ",
								"Создать - 1\n" +
								"Открыть - 2\n" +
								"Список всех - 3\n" +
								"Изменить данные официанта - 4\n" +
								"Удалить официанта - 5\n" +
								"Список заказов официанта - 6\n" +
								"Выход - 0");
					}
				}
				
				//заказы
				else if(mainChoise == 2){
					
					//logger.DEBUG
					if(logger.isDebugEnabled()){
						logger.debug("[DEBUG]Главное меню -> Заказы - 2");
					}
					
					int orderChoise;
					
					printMenu("ЗАКАЗЫ", 
							"Создать - 1\n" +
							"Открыть - 2\n" +
							"Список всех - 3\n" +
							"Список официантов заказа - 4\n" +
							"Выход - 0");
					
					while((orderChoise = scanner.nextInt()) != 0) {	
					
						//создать заказ
						if(orderChoise == 1) {
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Заказы -> Создать - 1");
							}
							
							int table; 
							String dishes;
							try
							{
								println(">>Введите номер столика:");
								table = scanner.nextInt();
								
								println(">>Введите блюда через запятую:");
								dishes = bufread.readLine();
								
								println("  read dishes");
								String[] dishesId = dishes.split(",");
								
								ArrayList<Integer>  dishesTemp = new ArrayList<Integer>();
								
								for(String dish : dishesId) {
									println("  inside for");
									try {
										dishesTemp.add(Integer.valueOf(dish));
									} catch(Exception ignore) {
										println("Exception !!!");										
									}									
								}	
								
								Order order = new Order(table, dishesTemp, new GregorianCalendar());
								println("  order created");
								
								orderSI.addOrder(order);
								
								println("  ЗАКАЗ ДОБАВЛЕН!");
								
								//logger.INFO
								if(logger.isInfoEnabled()) {
									logger.info("[INFO]Добавлен заказ:\n" + order.toString());
								}
							}
							 catch (SQLException e) {	
								logger.error("[ERROR]SQLException. Причина - " + e.getMessage());
								e.printStackTrace();
							} catch (IOException e) {
								logger.error("[ERROR]IOException. Причина - " + e.getMessage());
								e.printStackTrace();
							}
							
						}//end создать заказ
						
						//открыть заказ
						else if(orderChoise == 2) {
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Заказы -> Открыть - 2");
							}
							
							println(">>Введите id заказа");
							int id = scanner.nextInt();
							
							Order ord;						
							try {
								ord = orderSI.getOrderByID(id);
								//println(ord.toString());
								
								//logger.INFO
								if(logger.isInfoEnabled()){
									logger.info("[INFO]Открыли заказ:\n" + ord.toString());
								}
							} 
							catch (EntityNotFoundException e) {
								//println("Отсутствует заказ с данным id");
								
								logger.error("[ERROR]Отсутствует заказ с данным id");
								//e.printStackTrace();
							}							
							catch(SQLException exc) {
								//println("Ошибка открытия файла заказа");
								
								logger.error("[ERROR]Ошибка открытия файла заказа");									
							}
						}//end открыть заказ
						
						//список заказов
						else if(orderChoise == 3) {
							
							//logger.DEBUG
							if(logger.isDebugEnabled()){
								logger.debug("[DEBUG]Главное меню -> Заказы -> Список заказов - 3");
							}
							try{
								List<Order> allOrders = orderSI.getAllOrders();
								//println("Все заказы:");
								//showOrders(allOrders);								
								//logger.INFO
								if(logger.isInfoEnabled()){
									logger.info("[INFO]Открыли все заказы:\n" + showOrders(allOrders));
								}
							}
							catch (EntityNotFoundException e) {
								//println("Заказы отсутствуют в коллекции\n");
								
								logger.error("[ERROR]Заказы отсутствуют в хранилище");
							}								
							catch(SQLException exc) {
								//println("Ошибка чтения данных из файлов заказов");
								
								logger.error("[ERROR]Ошибка чтения данных из бд. Причина - " + exc.getMessage());									
							}							
								
						}//end список заказов
						
						//Список официантов заказа
						if(orderChoise == 4) {
							println(">>Введите id заказа");
							int orderId = scanner.nextInt();
							
							List<Waiter> waiters;						
							
							try {
								waiters = orderSI.getOrdersWaiters(orderId);
								//showWaiters(waiters);
								if(logger.isInfoEnabled()){
									logger.info("[INFO]Официанты по" + orderId + "заказу:\n" + showWaiters(waiters));
								}
							} 							
							catch (EntityNotFoundException e) {
								//println("Не обнаружены официанты по данному заказу ." + e.getMessage());
								
								logger.error("[ERROR]Не обнаружены официанты по данному заказу ." + e.getMessage());
							} 
							catch (SQLException e) {
								//println("Ошибка чтения из файла." + e.getMessage());
								
								logger.error("[ERROR]SQLException. Message:" + e.getMessage());
							}
						}//end if(orderChoise == 4)
						
						printMenu("ЗАКАЗЫ", 
								"Создать - 1\n" +
								"Открыть - 2\n" +
								"Список всех - 3\n" +
								"Список официантов заказа - 4\n" +
								"Выход - 0");					
					}//end цикл по заказам
					
				}//end choise == заказы
				
				//заказы и официанты
				else if(mainChoise == 3) {
					
					//logger.DEBUG
					if(logger.isDebugEnabled()){
						logger.debug("[DEBUG]Главное меню -> Заказы_и_официанты - 3");
					}
					
					long waiterId;
					long orderId;
					
					println(">>Введите id официанта");
					waiterId = scanner.nextLong();
					

					println(">>Введите id заказа");
					orderId = scanner.nextLong();					
					
					try {
						waitersOrdersSI.addLink(waiterId, orderId);
					}				
					catch(SQLException e) {
						//println("Ошибка записи данных официанта в бд. Причина - " + ioe.getMessage());

						logger.error("[ERROR]Ошибка записи данных в бд. Причина - " + e.getMessage());
					}
					
					
				}//end заказы и столики		
				
				else {
					//System.exit(0);
				}	
				
				printMenu("ГЛАВНОЕ МЕНЮ",
						"Официанты - 1\n" +
						"Заказы - 2\n" + 
						"Заказы_и_официанты - 3\n" +
						"Изменить режим(memory, file) - 4\n" +
						"Выход - 0"
				);		
				
			}//end while((waiterChoise = scanner.nextInt()) != 0)
		}
		
	        
		public static void println(String str) {
			System.out.println(str);
		}
		
		public static void printMenu(String label, String items) {
			System.out.println("----------------------\n---" + label + "---");
			System.out.println(items);
			//System.out.println("-----------------------");
			System.out.println(">>");
		}
		
		public static String showWaiters(List<Waiter> waiters) {
			if(waiters == null)
				return null;
			
			if(waiters.size() == 0)
				return null;
			
			StringBuilder all = new StringBuilder();
			String label = "ID   ФИО                                         Зарплата Дата рождения Дата принятия ";
			all.append(label);
			all.append("\n");
			
			//System.out.println(label);
					
			for(int i = 0; i < waiters.size(); i++) {
				long id = waiters.get(i).getWaiterID();
				int signs = 0;
				while(id != 0) {
					id /= 10;
					signs++;
				}
				
				StringBuilder builder = new StringBuilder();
	 			builder.append(waiters.get(i).getWaiterID());
	 			
	 			for(int j = signs; j < 5; j++) {
	 				builder.append(' ');
	 			}
	 			
	 			String FIO = waiters.get(i).getLastName() + " " + waiters.get(i).getFirstName() + " " + waiters.get(i).getPatronymicName();
	 			builder.append(FIO);
	 	
	 			for(int j = FIO.length(); j < 44; j++) {
	 				builder.append(' ');
	 			}
	 			
	 			int salary = waiters.get(i).getSalary();
	 			signs = 0;
	 			while(salary != 0) {
					salary /= 10;
					signs++;
				}
	 			
	 			builder.append(waiters.get(i).getSalary());
	 			for(int j = signs; j < 9; j++) {
	 				builder.append(' ');
	 			}
	 			
	 			GregorianCalendar bornDate = waiters.get(i).getBornDate();
	 			
	 			int day = bornDate.get(Calendar.DAY_OF_MONTH);
	 			int month = (bornDate.get(Calendar.MONTH) + 1); 			
	 			String born = ((day < 10) ? "0" + day:day)   + "-" + ((month < 10) ? "0" + month:month) + "-" + bornDate.get(Calendar.YEAR) + "    ";
	 			
	 			builder.append(born);  
	 			
	 			GregorianCalendar hireDate = waiters.get(i).getHireDate();
	 			
	 			day = hireDate.get(Calendar.DAY_OF_MONTH);
	 			month = (hireDate.get(Calendar.MONTH) + 1); 
	 			String hire = ((day < 10) ? "0" + day:day)   + "-" + ((month < 10) ? "0" + month:month) + "-" + hireDate.get(Calendar.YEAR) + "    ";
	 			
	 			builder.append(hire); 
	 			//System.out.println(builder.toString());
	 			all.append(builder);
	 			all.append("\n");
			}
			return all.toString();
		}	
		
		public static String showOrders(List<Order> orders) {
			//println("------------------------------------");
			StringBuilder bld = new StringBuilder();
			bld.append("------------------------------------\n");
			for(int i = 0; i < orders.size(); i++) {
				//System.out.println();
				//System.out.println(orders.get(i));
				//System.out.println();
				bld.append(orders.get(i).toString());
				bld.append("\n");
			}
			//println("------------------------------------");
			bld.append("------------------------------------\n");
			return bld.toString();
		}
}
